#define _CRT_SECURE_NO_WARNINGS 1

//#include<bits/stdc++.h>
//
//using namespace std;
//
//int main()
//{
//	string s1, s2;////0 1 2 3 4 5 6 7 8 9
//	int dp[10][7] = { 1,1,1,0,1,1,1,
//					 0,0,1,0,0,1,0,
//					 1,0,1,1,1,0,1,
//					 1,0,1,1,0,1,1,
//					 0,1,1,1,0,1,0,
//					 1,1,0,1,0,1,1,
//					 1,1,0,1,1,1,1,
//					 1,0,1,0,0,1,0,
//					 1,1,1,1,1,1,1,
//					 1,1,1,1,0,1,1 };
//
//	cin >> s1 >> s2;
//	int ret = 0;
//
//	for (int i = 0; i < s1.size(); i++)
//	{
//		int n = s1[i] - '0';
//		int m = s2[i] - '0';
//
//		int tmp =0;
//
//		for (int j = 0; j < 7; j++)
//		{
//			tmp += fabs(dp[n][j] - dp[m][j]);
//		}
//		ret += tmp;
//	}
//
//	cout << ret;
//
//	return 0;
//}



//#include<bits/stdc++.h>
//
//using namespace std;
//
//int main()
//{
//	int n;
//	cin >> n;
//
//	vector<int> even;
//	vector<int> odd;
//	
//	int pos1 = 0, pos2 = 0;
//	for (int i = 0; i < n; i++)
//	{
//		int tmp;
//		cin >> tmp;
//		if (tmp % 2 == 0)
//			even.push_back(tmp);
//		else
//			odd.push_back(tmp);
//	}
//
//	sort(even.begin(), even.end());
//	sort(odd.begin(), odd.end());
//	for (auto x : odd)
//	{
//		printf("%d ", x);
//	}
//	for (auto x : even)
//	{
//		printf("%d ", x);
//	}
//
//
//	return 0;
//}

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
	int n, ret = 0;
	cin >> n;
	vector<int> nums(n + 1);

	for (int i = 1; i <= n; i++)
	{
		cin >> nums[i];
	}

	for (int i = 1; i <= n; i++)
	{
		for (int j = i + 1; j <= n; j++)
		{
			ll tmp = nums[i] + nums[j];
			if (tmp == (-tmp & tmp))
				ret++;
		}
	}
	cout << ret;

	return 0;
}


//#include<bits/stdc++.h>
//
//using namespace std;
//
//int check[10001];
//int n, aim;
//
//int dfs(vector<vector<int>>& nums, int time, int aim,int sum,int pos)
//{
//	int ret = INT_MAX;
//	
//	if (check[pos])
//	{
//		sum += nums[pos][1];
//		aim--;
//	}
//	else
//	{
//		sum += nums[pos][0];
//		time--;
//		aim--;
//	}
//	if (aim == 0)
//		return sum;
//	if (time <=0)
//	{
//		for (int i = 1; i <= n; i++)
//		{
//			check[pos]++;
//			ret = min(ret, dfs(nums, time, aim, sum, i));
//			check[pos]--;
//		}
//	}
//	else
//	{
//		for (int i = 1; i < n; i++)
//		{
//			check[pos]++;
//			ret = min(ret, dfs(nums, time, aim, sum, i));
//			check[pos]--;
//		}
//	}
//	return ret;
//}
//
//
//int main()
//{
//	cin >> n >> aim;
//	int ret = INT_MAX;
//	vector<vector<int>> nums(n + 1, vector<int>(2));
//	int time = n;
//
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> nums[i][0] >> nums[i][1];
//	}
//	for (int i = 1; i < n; i++)
//	{
//		ret = min(ret, dfs(nums, time-1, aim, 0, i));
//	}
//	cout << ret;
//
//	return 0;
//}

